/* CSP-201812P4 数据中心（图、最短路、SPFA）
从root开始做SPFA，但松弛所用的权是路径最大边长而不是总边长。
即timeTo[v] = max(timeTo[u], u~v.t)
*/
#include <algorithm>
#include <climits>
#include <iostream>
#include <list>
#include <queue>
#include <vector>
using namespace std;

int main(){
  int n, m, root;
  cin >> n >> m >> root;
  typedef pair<int, int> PII;
  vector<list<PII> > g(n + 1);
  for(int i = 0, u, v, t; i < m; ++i){
    cin >> u >> v >> t;
    g[u].push_back(make_pair(v, t));
    g[v].push_back(make_pair(u, t));
  }
  vector<int> tMax(n + 1, INT32_MAX);
  vector<bool> inQ(n + 1);
  queue<int> q;
  q.push(root);
  inQ[root] = 1;
  tMax[root] = 0;
  while(!q.empty()){
    int u = q.front();
    q.pop();
    inQ[u] = 0;
    for(list<PII>::iterator it = g[u].begin(), ie = g[u].end(); it != ie; ++it){
      int v = it->first;
      int t = max(tMax[u], it->second);
      if(tMax[v] > t){ // 发现到v的更优路线
        tMax[v] = t;
        if(!inQ[v]){
          q.push(v);
        }
      }
    }
  }
  cout << *max_element(tMax.begin() + 1, tMax.end()) << endl;
}